package common

import (
	"gin-demo/pkg/util/convert"
	"github.com/casbin/casbin"
)

const (
	PrefixUserID = "u"
	PrefixRoleID = "r"
)

var Enforcer *casbin.Enforcer

// 角色-URL导入
func InitCabinEnforcer() (err error) {
	//var enforcer *casbin.Enforcer
	// 新版本管理 go mod
	//enforcer = casbin.NewEnforcer("conf/auth_model.conf")
	//enforcer, err = casbin.NewEnforcer("conf/auth_model.conf", )
	//if err != nil {
	//	return
	//}
	//var roles []models.Role
	//err = models.Find(&models.Role{}, &roles)
	//if err != nil {
	//	return
	//}
	//if len(roles) == 0 {
	//	Enforcer = enforcer
	//	return
	//}
	//for _, role := range roles {
	//	setRolePermission(enforcer, role.ID)
	//}
	//Enforcer = enforcer
	return
}

// 删除角色
func CabinDeleteRole(roleIds []int) {
	if Enforcer == nil {
		return
	}
	for _, rid := range roleIds {
		// 新版本管理 go mod
		_ = Enforcer.DeletePermissionsForUser(PrefixRoleID + convert.ToString(rid))
		Enforcer.DeleteRole(PrefixRoleID + convert.ToString(rid))
		//_, _ = Enforcer.DeletePermissionsForUser(PrefixRoleID + convert.ToString(rid))
		//_, _ = Enforcer.DeleteRole(PrefixRoleID + convert.ToString(rid))
	}
}

// 设置角色权限
func CabinSetRolePermission(roleId int) {
	if Enforcer == nil {
		return
	}
	// 新版本管理 go mod
	_ = Enforcer.DeletePermissionsForUser(PrefixRoleID + convert.ToString(roleId))
	//_, _ = Enforcer.DeletePermissionsForUser(PrefixRoleID + convert.ToString(roleId))
	setRolePermission(Enforcer, roleId)
}

// 设置角色权限
func setRolePermission(enforcer *casbin.Enforcer, roleid int) {
	//var roleMenus []models.RoleMenu
	//err := models.Find(&models.RoleMenu{RoleID: roleid}, &roleMenus)
	//if err != nil {
	//	return
	//}
	//for _, roleMenu := range roleMenus {
	//	menu := models.Menu{}
	//	where := models.Menu{}
	//	where.ID = roleMenu.MenuID
	//	_, err = models.First(&where, &menu)
	//	if err != nil {
	//		return
	//	}
	//	if menu.MenuType == 3 {
	//		// 新版本管理 go mod
	//		_ = enforcer.AddPermissionForUser(PrefixRoleID+convert.ToString(roleid), "/api/"+menu.URL, menu.OperateType)
	//		//_, err := enforcer.AddPermissionForUser(PrefixRoleID + convert.ToString(roleid), "/api/"+ menu.URL, menu.OperateType)
	//		//if err != nil{
	//		//	logging.Error(fmt.Printf("add permission for role id %d error: %v", roleid, err))
	//		//}
	//	}
	//}
}

// 检查用户是否有权限
func CabinCheckPermission(userID, url, methodtype string) bool {
	return Enforcer.Enforce(PrefixUserID+userID, url, methodtype)
}

// 用户角色处理
func CabinAddRoleForUser(userId int) (err error) {
	//if Enforcer == nil {
	//	return
	//}
	//uid := PrefixUserID + convert.ToString(userId)
	//// 新版本管理 go mod
	//_ = Enforcer.DeleteRolesForUser(uid)
	//var adminsRoles []models.AdminsRole
	//err = models.Find(&models.AdminsRole{AdminID: userId}, &adminsRoles)
	//if err != nil {
	//	return
	//}
	//for _, adminsRole := range adminsRoles {
	//	// 新版本管理 go mod
	//	_ = Enforcer.AddRoleForUser(uid, PrefixRoleID+convert.ToString(adminsRole.RoleID))
	//}
	return
}
